home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / PseudoPacker.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  3.9 KB  |  190 lines

  1. * Programmheader
  2. *
  3. *    Name:        Pseudo
  4. *    Author:        SDI
  5. *    Distribution:    PD
  6. *    Description:    XFD external decruncher for Pseudo Packer 1.0
  7. *    Compileropts:    -
  8. *    Linkeropts:    -
  9. *
  10. * 1.0   05.06.99 : first version
  11. * 1.1   25.07.99 : added direct support for plain address files
  12.  
  13.         INCLUDE    "AINCLUDE:IncDirs.i"
  14.         INCLUDE    "lvo.i"
  15.  
  16.         INCLUDE    "libraries/xfdmaster.i"
  17.         INCLUDE "exec/memory.i"
  18.  
  19.         * head function for tests
  20. *        INCLUDE    "xfdExeHead.a"
  21.  
  22. ForeMan        MOVEQ    #-1,D0
  23.         RTS
  24.  
  25.         DC.L    XFDF_ID
  26.         DC.W    1,0
  27.         DC.L    0,0,S_PseudoP
  28.  
  29.         DC.B    "$VER: Pseudo 1.1 (25.07.1999) by SDI",0
  30. N_PseudoP    DC.B    'Pseudo Packer 1.0',0
  31.         EVEN
  32.  
  33. S_PseudoP    DC.L    0        ;no more slaves
  34.         DC.W    2        ;version
  35.         DC.W    39        ;master version
  36.         DC.L    N_PseudoP    ;name
  37.         DC.W    XFDPFF_ADDR    ;flags
  38.         DC.W    0
  39.         DC.L    RB_PseudoP    ;recog buffer
  40.         DC.L    DB_PseudoP    ;decrunch buffer
  41.         DC.L    0        ;recog segment
  42.         DC.L    0        ;decrunch segment
  43.         DC.W    0,0
  44.         DC.L    $CC+26        ;MinBufSize
  45.  
  46. *************************************************************************
  47. *    Recog buffer function: receives buffer + length in A0/D0    *
  48. *************************************************************************
  49.  
  50. RB_PseudoP    MOVEQ    #80,D0
  51.         CMP.W    #$FFFE,8-80(A0,D0)    * short header, no exe
  52.         BEQ.B    .Check
  53.         MOVEQ.L    #80+26,D0
  54.         CMP.W    #$FFFE,8-80(A0,D0)    * long header no exe
  55.         BEQ.B    .Check
  56.         ADDQ.L    #6,D0
  57.         CMP.W    #$FFFE,8-80(A0,D0)    * short header, exe
  58.         BEQ.B    .Check
  59.         ADDI.L    #26,D0
  60.         CMP.W    #$FFFE,8-80(A0,D0)    * long header, exe
  61.         BNE.B    .No
  62. .Check        CMP.L    #$FFFE41FA,8-80(A0,D0)
  63.         BNE.B    .No
  64.         CMP.L    #$4CDF7FFF,$48-80(A0,D0)
  65.         BNE.B    .No
  66.         CMP.L    #$B24667F6,$94-80(A0,D0)
  67.         BNE.B    .No
  68.         CMP.L    #$7007611A,$98-80(A0,D0)
  69.         BNE.B    .No
  70.         CMP.L    #$E28D6702,$A8-80(A0,D0)
  71.         BNE.B    .No
  72.         RTS
  73.  
  74. .No        MOVEQ    #0,D0
  75.         RTS
  76.  
  77. *************************************************************************
  78. *    Decrunch buffer function: receives xfdbiBufferInfo in A0    *
  79. *************************************************************************
  80.  
  81. DB_PseudoP    MOVEM.L    D2-D6/A2-A6,-(A7)
  82.         MOVE.L    A0,A5
  83.         MOVE.W    #XFDERR_NOMEMORY,xfdbi_Error(A5)
  84.  
  85.         MOVEA.L    xfdbi_SourceBuffer(A5),A4
  86.  
  87.         MOVE.L    A4,A0
  88.         BSR.B    RB_PseudoP
  89.         LEA    -80(A4,D0),A4
  90.  
  91.         MOVE.L    $28(A4),D0
  92.         SUB.L    $14(A4),D0
  93.         MOVE.L    D0,xfdbi_TargetBufLen(A5)
  94.         MOVE.L    D0,xfdbi_TargetBufSaveLen(A5)
  95.         MOVE.L    xfdbi_TargetBufMemType(A5),D1
  96.         BSET    #MEMB_CLEAR,D1
  97.         MOVEA.L    xfdm_ExecBase(A6),A6
  98.         JSR    _LVOAllocMem(A6)
  99.         MOVE.L    D0,xfdbi_TargetBuffer(A5)
  100.         BEQ.B    .NoMem
  101.  
  102.         MOVE.L    $14(A4),xfdbi_DecrAddress(A5)
  103.         MOVE.L    $2(A4),xfdbi_JmpAddress(A5)
  104.  
  105.         MOVE.L    D0,A3            * start of buffer
  106.         LEA    $110(A4),A0        * source buffer
  107.         ADD.L    $1A(A4),A0
  108.         LEA    PseudoData(PC),A4
  109.         CLR.W    xfdbi_Error(A5)
  110.         BSR.B    D_PseudoP
  111. .NoMem        MOVEM.L    (A7)+,D2-D6/A2-A6
  112.         RTS
  113.  
  114. PseudoData    DC.L    $090A0C0D
  115.  
  116. *************************************************************************
  117. *    decrunch routine - copied from file (a bit modified)        *
  118. *************************************************************************
  119.  
  120. D_PseudoP    MOVEQ    #3,D6
  121.         MOVEQ    #7,D7
  122.         MOVEQ    #1,D5
  123.         MOVEA.L    A3,A2
  124.         MOVE.L    -(A0),D1
  125.         TST.B    D1
  126.         BEQ.B    .Decr1
  127.         BSR.B    .Decr5
  128.         SUBQ.B    #1,D1
  129.         LSR.L    D1,D5
  130. .Decr1        LSR.L    #8,D1
  131.         ADDA.L    D1,A3
  132. .Decr2        BSR.B    .Decr5
  133.         BCS.B    .Decr12
  134.         MOVEQ    #0,D2
  135. .Decr3        MOVEQ    #1,D0
  136.         BSR.B    .Decr8
  137.         ADD.W    D1,D2
  138.         CMP.W    D6,D1
  139.         BEQ.B    .Decr3
  140. .Decr4        MOVEQ    #7,D0
  141.         BSR.B    .Decr8
  142.         MOVE.B    D1,-(A3)
  143.         DBRA    D2,.Decr4
  144.         CMPA.L    A3,A2
  145.         BCS.B    .Decr12
  146.         RTS    
  147. .Decr5        LSR.L    #1,D5
  148.         BEQ.B    .Decr6
  149.         RTS    
  150. .Decr6        MOVE.L    -(A0),D5
  151.         ROXR.L    #1,D5
  152.         RTS    
  153. .Decr7        SUBQ.W    #1,D0
  154. .Decr8        MOVEQ    #0,D1
  155. .Decr9        LSR.L    #1,D5
  156.         BEQ.B    .Decr11
  157. .Decr10        ROXL.L    #1,D1
  158.         DBRA    D0,.Decr9
  159.         RTS    
  160. .Decr11        MOVE.L    -(A0),D5
  161.         ROXR.L    #1,D5
  162.         BRA.B    .Decr10
  163. .Decr12        MOVEQ    #1,D0
  164.         BSR.B    .Decr8
  165.         MOVEQ    #0,D0
  166.         MOVE.B    (A4,D1.W),D0
  167.         MOVE.W    D1,D2
  168.         CMP.W    D6,D2
  169.         BNE.B    .Decr15
  170.         BSR.B    .Decr5
  171.         BCS.B    .Decr13
  172.         MOVEQ    #7,D0
  173. .Decr13        BSR.B    .Decr7
  174.         MOVE.W    D1,D3
  175. .Decr14        MOVEQ    #2,D0
  176.         BSR.B    .Decr8
  177.         ADD.W    D1,D2
  178.         CMP.W    D7,D1
  179.         BEQ.B    .Decr14
  180.         BRA.B    .Decr16
  181. .Decr15        BSR.B    .Decr7
  182.         MOVE.W    D1,D3
  183. .Decr16        ADDQ.W    #1,D2
  184. .Decr17        MOVE.B    (A3,D3.W),-(A3)
  185.         DBRA    D2,.Decr17
  186.         CMPA.L    A3,A2
  187.         BCS.B    .Decr2
  188.         RTS    
  189.         END
  190.